package com.zsc.wxm.ysh.anjo.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zsc.wxm.ysh.anjo.member.model.Member;
import com.zsc.wxm.ysh.anjo.result.PageResult;
import com.zsc.wxm.ysh.anjo.service.base.model.member.bo.MemberBO;
import com.zsc.wxm.ysh.anjo.service.base.model.member.dto.AdminRegisterDTO;
import com.zsc.wxm.ysh.anjo.service.base.model.member.dto.MemberInfoDTO;
import com.zsc.wxm.ysh.anjo.service.base.model.member.qo.MemberQuery;
import com.zsc.wxm.ysh.anjo.service.base.model.member.vo.RegisterMemberVO;
import com.zsc.wxm.ysh.anjo.service.base.model.member.vo.UserInfoVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author playmaker
 * @since 2021-01-04
 */
public interface MemberService extends IService<Member> {

    /**
     * 用户注册: 该方法已不适用
     *
     * @param registerMemberVo
     */
    @Deprecated
    void register(RegisterMemberVO registerMemberVo);

    /**
     * 用户注册版本2
     *
     * @param registerMemberVo
     */
    void registerV2(RegisterMemberVO registerMemberVo);

    /**
     * 管理员注册
     *
     * @param params
     */
    void adminRegister(AdminRegisterDTO params);

    /**
     * 通过指定条件查询
     *
     * @param query
     * @return
     */
    List<UserInfoVO> getListByQo(MemberQuery query);

    /**
     * 短信登录
     *
     * @param phone
     * @param code
     * @return
     */
    @Deprecated
    String loginByPhone(String phone, String code);

    /**
     * 更新用户信息
     *
     * @param params
     */
    void update(MemberInfoDTO params);

    /**
     * 获取当前登录用户的信息
     *
     * @param request
     * @return
     */
    UserInfoVO getUserInfo(HttpServletRequest request);

    /**
     * 更新用户头像
     *
     * @param id
     * @param file
     */
    void updateAvatar(Long id, MultipartFile file);

    /**
     * 根据条件查询一条数据
     *
     * @param query
     * @return
     */
    MemberBO getOneByQo(MemberQuery query);

    /**
     * 根据查询条件查询多条数据
     *
     * @param query
     * @return
     */
    List<MemberBO> getList(MemberQuery query);


    /**
     * 获取房东房源信息
     *
     * @param query
     * @return
     */
    PageResult getLandlordInfos(MemberQuery query);

    /**
     * 批量获取
     * @param ids
     * @return
     */
    List<MemberBO> getListByIds(List<Long> ids);

}
